package base.transporte;

public class EstimadorRTT {
	public long estimatedRTT;
	public long devRTT;
	boolean primeiroSample;
	public long time;
	
	public EstimadorRTT() {
		estimatedRTT = 0;
		devRTT = 0;
		primeiroSample = true;
	}
	
	public synchronized long getTimeoutInterval()
	{
		long retorno = 0;
		if(primeiroSample == true)
		{
			retorno = 1000;
		}
		else
		{
			retorno = estimatedRTT + 4 * devRTT;
		}
		if(retorno < 4)
		{
			retorno = 4;
		}
	
		return retorno;
	}
	
	public synchronized void insertSample(long rttSample)
	{
		if(primeiroSample)
		{
			estimatedRTT = rttSample;
			devRTT = rttSample;
			primeiroSample = false;
		}
		else
		{
			devRTT = (long) (0.75 * devRTT + 0.25 * Math.abs(rttSample - estimatedRTT));
			estimatedRTT = (long) (0.875 * estimatedRTT + 0.125 * rttSample);
		}
		
	}
}
